
/****************************************************
  @Title: 数据结构实验
  @Name: <实验6-6> 哈夫曼树和哈夫曼编码 
  @Object:
      [实验目的]
         实现哈夫曼算法，对给定的数据构造哈夫曼树，
         并求出哈夫曼编码。
      [实验提示]
         在 huffman.h 中编写该算法。
  @Include:
      huffman.h [*]
          哈夫曼算法的实现
  @Usage:
      请查看"TO-DO列表",根据要求完成代码
  @Copyright: BTC 2004
  @Author: Zhuang Bo
  @Date: 2004
  @Description:
*****************************************************/

#include <stdio.h>
#include <stdlib.h>

#include "huffman.h"


int main()
{
    const int N = 8;
    int w[]={5,29,7,8,14,23,3,11};
    HuffmanTree ht;
    HuffmanCode hc;
    
    //求哈夫曼编码
    HuffmanCoding(ht,hc,w,N);
    
    //打印哈夫曼树
    for(int i=1; i<=2*N-1; i++)
        printf("[%2d] %3d %3d %3d %3d\n", i, ht[i].weight,
        ht[i].parent, ht[i].lchild, ht[i].rchild);
    
    //打印哈夫曼编码
    for(int i=1; i<=N; i++)
        printf("%s\n", hc[i]);
    
    //释放哈夫曼树和哈夫曼编码
    free(ht);
    for(int i=1; i<=N; i++)
        free(hc[i]);
    free(hc);
    
    system("pause");
}

